package it.crosato.stage.server.model.retriever;

import it.crosato.stage.shared.exceptions.DatabaseConnectionException;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Logger;

public class DatabaseConnection {
	
	private static Connection cn = null;
	private static Statement st = null;

	/**
	 * Apre una connessione alla banca dati interna, utilizzando un utente
	 * appositamente creato.
	 * @throws DatabaseConnectionException
	 */
	public static void openConnection() throws DatabaseConnectionException {
		try {
			if (cn == null) {
				Class.forName ("org.postgresql.Driver");
				cn = DriverManager.getConnection("jdbc:postgresql://localhost/cometadb", "utente", "utente");
			}
		}
		catch (SQLException sqle) {
			Logger.getLogger("myLog").info("sqle ---> " + sqle.getMessage());
			throw new DatabaseConnectionException();
		}
		catch (ClassNotFoundException cnfe) {
			Logger.getLogger("myLog").info("cnfe ---> " + cnfe.getMessage());
			throw new DatabaseConnectionException();
		}
	}
	
	/**
	 * Chiude la connessione alla banca dati distruggendone anche lo statement.
	 */
	public static void closeConnection() {
		try {
			if (st != null) {
				st.close();
				st = null;
			}
			if (cn != null) {
				cn.close();
				cn = null;
			}
		}
		catch (SQLException sqle) {
			Logger.getLogger("myLog").info("sqle ---> " + sqle.getMessage());
		}
	}

	/**
	 * 
	 * @return lo statement attraverso il quale si può interrogare la banca dati
	 * @throws DatabaseConnectionException
	 */
	public static Statement getStatement() throws DatabaseConnectionException {
		try {
			if (cn != null) {
				st = cn.createStatement();
				return st;
			}
			else {
				throw new DatabaseConnectionException();
			}
		}
		catch (SQLException sqle) {
			Logger.getLogger("myLog").info("sqle ---> " + sqle.getMessage());
			throw new DatabaseConnectionException();
		}
	}

}
